Skip to content

[Feature](routine_load) auto fill missing columns#64071

Open
billryan wants to merge 1 commit into
apache:masterfrom
billryan:feature/auto-fill-missing-columns
Open

[Feature](routine_load) auto fill missing columns#64071
billryan wants to merge 1 commit into
apache:masterfrom
billryan:feature/auto-fill-missing-columns

Conversation

@billryan

@billryan billryan commented Jun 3, 2026

Copy link
Copy Markdown

What problem does this PR solve?

Issue Number: close #xxx

Related PR: #xxx

Problem Summary:

For routine load jobs, if we have thousands of columns to import, we can use json format let doris automatically match the column name with table schema. But for some scenarios, the upstream data does not have the column name(can be derived from current columns) and we can not add new column name easily, so we consider if we can just specify the new derived column only and let doris fill the missing columns with table schema.

e.g.

The MQ data have stat_time_day field but does not have p_date column, we can add new column like this p_date = stat_time_day, fill missing columns from table schema.

CREATE ROUTINE LOAD db.job_name ON table_a
COLUMNS(p_date = stat_time_day)
PROPERTIES (
    "format" = "json",
    "fill_missing_columns" = "true"
)
FROM KAFKA (...);

Release note

None

Check List (For Author)

  • Test

    • Regression test
    • Unit Test
    • Manual test (add detailed scripts or steps below)
    • No need to test or manual test. Explain why:
      • This is a refactor/code format and no logic has been changed.
      • Previous test can cover this change.
      • No code files have been changed.
      • Other reason
  • Behavior changed:

    • No.
    • Yes.
  • Does this need documentation?

    • No.
    • Yes.

Check List (For Reviewer who merge this PR)

  • Confirm the release note
  • Confirm test cases
  • Confirm document
  • Add branch pick label

@hello-stephen

Copy link
Copy Markdown
Contributor

Thank you for your contribution to Apache Doris.
Don't know what should be done next? See How to process your PR.

Please clearly describe your PR:

  1. What problem was fixed (it's best to include specific error reporting information). How it was fixed.
  2. Which behaviors were modified. What was the previous behavior, what is it now, why was it modified, and what possible impacts might there be.
  3. What features were added. Why was this function added?
  4. Which code was refactored and why was this part of the code refactored?
  5. Which functions were optimized and what is the difference before and after the optimization?

@billryan billryan force-pushed the feature/auto-fill-missing-columns branch from 531f6aa to 43168c2 Compare June 4, 2026 03:55
@billryan

billryan commented Jun 4, 2026

Copy link
Copy Markdown
Author

/review

1 similar comment
@liaoxin01

Copy link
Copy Markdown
Contributor

/review

@github-actions github-actions Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I found blocking issues that need changes before this can be approved.

Critical checkpoints:

  • Goal/test proof: the PR appears to add fill_missing_columns support for JSON routine load and tests cover property parsing/show/alter validation, but the implementation currently does not compile and the Nereids routine-load execution path does not propagate the property into JsonFileFormatProperties.
  • Scope/focus: the intended code change is small and focused, but the duplicate method and missing propagation make it incomplete.
  • Concurrency/lifecycle/config/storage compatibility: no new concurrency, lifecycle, persisted format, or dynamic config concerns identified in this diff.
  • Parallel paths: the routine-load job properties path and the Nereids file-format-property path are parallel; the latter is not updated, so runtime behavior diverges from show/alter state.
  • Tests: added unit tests do not cover the Nereids execution path where fill_missing_columns must be observed, and the current source would fail compilation before tests run.
  • Observability/performance/transactionality: no additional concerns found beyond the functional blockers.

User focus: no additional user-provided focus points were specified.

/**
* Returns true if the file format is JSON and fill_missing_columns is enabled. Only meaningful for JSON.
*/
private boolean isFillMissingColumns(NereidsBrokerFileGroup fileGroup) {

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This duplicates the isFillMissingColumns(NereidsBrokerFileGroup) method declared just above at lines 449-452, so NereidsLoadScanProvider will not compile (method isFillMissingColumns(...) is already defined). Please remove one of the duplicate declarations before this can pass FE compilation.

// So that the following process can be unified
boolean specifyFileFieldNames = copiedColumnExprs.stream().anyMatch(p -> p.isColumn());
if (!specifyFileFieldNames) {
if (!specifyFileFieldNames || isFillMissingColumns(fileGroup)) {

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

For routine load this condition will still be false even when the job property was set. KafkaRoutineLoadJob.toNereidsRoutineLoadTaskInfo() copies jobProperties into NereidsRoutineLoadTaskInfo, but NereidsDataDescription(NereidsLoadTaskInfo) only copies JSON props like strip_outer_array, jsonpaths, json_root, fuzzy_parse, read_json_by_line, and num_as_string into analysisMap. It never copies fill_missing_columns, so analyzeFileFormatProperties() builds a JsonFileFormatProperties with the default false, and this new branch is not taken for the routine-load execution path. Please add the property to the Nereids task-info/data-description propagation path and cover it with a test that reaches NereidsLoadScanProvider.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants